using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 3/25/2014 4:03:17 PM
    /// </summary>
    [Serializable]
    public class ArchivoGlobalLista : ReadOnlyListBase<ArchivoGlobalLista, ArchivoGlobalInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(ArchivoGlobalLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static ArchivoGlobalLista GetArchivoGlobalListaLicencia(string idExpedienteLicencia,Boolean ifIdExpediente)
        {
            GlobalCriteria filter = GlobalCriteria.NewGlobalCriteria();
            filter.Id = idExpedienteLicencia;
            filter.Modulo = Constantes.Licenciamiento;
            filter.IfExpediente = ifIdExpediente;
            return DataPortal.Fetch<ArchivoGlobalLista>(filter);
        }
        public static ArchivoGlobalLista GetArchivoGlobalListaAuditoria(string idExpedienteAuditoria, Boolean ifIdExpediente)
        {
            GlobalCriteria filter = GlobalCriteria.NewGlobalCriteria();
            filter.Id = idExpedienteAuditoria;
            filter.Modulo = Constantes.Auditoria;
            filter.IfExpediente = ifIdExpediente;
            return DataPortal.Fetch<ArchivoGlobalLista>(filter);
        }

        private ArchivoGlobalLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(GlobalCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
             DataSet datos =null;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> { };
            if (criteria.Modulo == Constantes.Licenciamiento)
            {
               
                if (criteria.IfExpediente)
                {
                    parametros = new List<Parametro> 
                    {
                       new Parametro("ec_exp_id", criteria.Id)
                    };


                    datos = accesoDatos.EjecutarDataSet("\"LISTA_GLOBAL_ARCHIVOS_LICEXP\"", parametros);
                }
                else
                {
                    parametros = new List<Parametro> 
                    {
                       new Parametro("ec_eli_id", criteria.Id)
                    };

                    datos = accesoDatos.EjecutarDataSet("\"LISTA_GLOBAL_ARCHIVOS_LIC\"", parametros);
                }
            }
            else
            {
               
                if (criteria.IfExpediente)
                {
                    parametros = new List<Parametro> 
                    {
                       new Parametro("ec_exp_id", criteria.Id)
                    };
                    datos = accesoDatos.EjecutarDataSet("\"LISTA_GLOBAL_ARCHIVOS_AUDEXP\"", parametros);
                }
                else
                {
                    parametros = new List<Parametro> 
                    {
                       new Parametro("ec_exa_id", criteria.Id)
                    };

                    datos = accesoDatos.EjecutarDataSet("\"LISTA_GLOBAL_ARCHIVOS_AUD\"", parametros);
                }
            }
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(ArchivoGlobalInfo.GetArchivoGlobalInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 3/25/2014 4:03:17 PM
    /// </summary>
    [Serializable]
    public class ArchivoGlobalInfo : ReadOnlyBase<ArchivoGlobalInfo>
    {
        #region Business Methods      
        public Guid Id { get; internal set; }
        public string Nombre { get; internal set; }
        public string Descripcion { get; internal set; }
        public DateTime FechaCreacion { get; internal set; }
        public int Version { get; internal set; }
        public string Referencia { get; internal set; }
        public string Ruta { get; set; }       
        public Guid PersonaId { get; internal set; }
        public string PersonaNombres { get; internal set; }      
        public string FaseNombre { get; internal set; }
        public string Origen { get; internal set; }
        #endregion

        #region Factory Methods

        internal static ArchivoGlobalInfo GetArchivoGlobalInfo(DataRow childData)
        {
            return DataPortal.FetchChild<ArchivoGlobalInfo>(childData);
        }

        private ArchivoGlobalInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
                Id = Guid.Parse(childData["arc_id"].ToString());          
                Nombre = childData["arc_nombre"].ToString();           
                Descripcion = childData["arc_descripcion"].ToString();           
                FechaCreacion = DateTime.Parse(childData["arc_fecha_creacion"].ToString());           
                Referencia = childData["arc_referencia"].ToString();
                Version = int.Parse(childData["arc_version"].ToString());
                Ruta = childData["arc_ruta"].ToString();
                if (!(childData["per_id"] is  DBNull))
                {
                    PersonaId = Guid.Parse(childData["per_id"].ToString());
                }
                if (!(childData["nombres"] is DBNull))
                {
                    PersonaNombres = childData["nombres"].ToString();
                }
                if (!(childData["fase"] is DBNull))
                {
                    FaseNombre = childData["fase"].ToString();
                }
               
             
                Origen = childData["origen"].ToString();
                
        }

        #endregion
    }
}
